// [1, 2, 3] [[],[1],[1,2], [1,3], [1,2,3], [2], [2,3], [3]]

function alg (arr: Array<number>): Array<Array<number>> {
  let results: Array<Array<number>> = []
  let arrLen = arr.length
  /**
   * 
   * @param i 
   * @param item 
   * 
   * @description 包含当前元素和不包含当前元素 递归调用
   */
  function union (i: number, item: Array<number>) {
    if (i >= arrLen) {
      return
    }
    item.push(arr[i])
    results.push(item.slice())
    union(i + 1, item)
    item.pop()
    union(i + 1, item)
  }
  union(0, [])
  return results
}

function main () {
  let arr = [1, 2, 3, 4]
  console.log(alg(arr))
}


main()
